#include <vector>

using std::vector;

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int ret = nums.size() + 1;
        int i = 0, j = 0;
        int sum = nums[0];
        while (j<nums.size()) {
            while (j < nums.size() - 1 && sum < target) {
                j++;
                sum += nums[j];
            }
            if (j < nums.size() && sum >= target) {
                ret = std::min(ret, j - i + 1);
            }
            sum -= nums[i];
            i++;
            if (i > j) {
                j++;
                if (j < nums.size()) {
                    sum += nums[j];
                }
            }
        }
        return ret > nums.size() ? 0 : ret;
    }
};